package ling.common;


import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.domain.entity.SysDictType;
import javafx.util.Pair;
import lombok.var;
import org.springframework.context.annotation.Description;
import org.springframework.stereotype.Service;

import javax.xml.bind.annotation.XmlAttribute;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.stream.Collectors;

/**
 * 字典初始化常量;
 * @author : He-LiangLiang@Outlook.com
 * @date : 2025-3-26
 */
@Service("ard")
public class DictConst {
    static final String indexValueSign="index";
    public static final String type_prefix="ar_";
    static SysDictData dictCreate(String label, String value) {
        var data = new SysDictData();
        data.setDictLabel(label);
        data.setDictValue(value);
        return data;
    }

    static SysDictType typeCreate(String label, String value) {
        var type = new SysDictType();
        type.setDictName(label);
        type.setDictType(value);
        return type;
    }
    interface EnumIntValue {
        default int getValue() {
            return ((Enum) this).ordinal();
        }
    }

    @Description("任职年限")
    public enum  team_appointment_years implements EnumIntValue{
        三年(3),
        五年(5);

        team_appointment_years(){}
        team_appointment_years(int val)
        {
            value=val;
        }
        int value;
        @Override
        public int getValue() {
            return value;
        }
    }
    @XmlAttribute(name="嵩县乡镇")
    public static final String ar_songxian_town="城关镇|田湖镇|车村镇|旧县镇|闫庄镇|德亭镇|大章镇|白河镇|纸房镇|九皋镇|大坪乡|库区乡|何村乡|饭坡乡|黄庄乡|木植街乡";

    @XmlAttribute(name="工作岗位")
    public static String pb_member_job="其他从业人员|党组织关系在人才（劳动）服务中心，不明职业的人员|（转业）待安置、学生毕业未就业人员|自由职业人员|个体工商户中的从业人员|停薪留职人员|社区工作人员|大学生村官|内部退养职工|退职人员|退休人员|离退休干部|技工学校学生|高中学生|中等专业学校学生|大学专科其他年级学生|大学专科一年级学生|大学专科毕业年级学生|大学本科其他年级学生|大学本科一年级学生|大学本科毕业年级学生|研究生其他年级学生|研究生一年级学生|研究生毕业年级学生|其他农牧渔民|外出务工经商人员|乡村医生|农牧渔业生产人员|事业单位工勤岗位|机关单位工勤岗位|民办非企业工勤岗位|非公有企业工勤岗位|公有制经济控制单位工勤岗位|民办非企业专业技术岗位|民办非企业管理岗位|非公有经济控制企业专业技术岗位|非公有经济控制企业管理岗位|公有经济控制企业专业技术岗位|公有经济控制企业管理岗位|事业单位专业技术岗位|事业单位管理岗位|参照公务员法管理的工作人员|公务员|解放军，武警";
    @XmlAttribute(name="学历")
    public static String pb_member_education="技工学校|职业高中|中等专科|省（区、市）委党校大专|中央党校大专|省（区、市）委党校大学|中央党校大学|第二学士学位班|大学普通班|大专|大学|省（区、市）委党校研究生|中央党校研究生|硕士生班|硕士研究生|博士研究生|其他|小学|初中|普通高中";
    @XmlAttribute(name = "民族")
    public static String pb_member_nation="汉族|蒙古族|回族|藏族|维吾尔族|苗族|彝族|壮族|布依族|朝鲜族|满族|侗族|瑶族|白族|土家族|哈尼族|哈萨克族|傣族|黎族|傈僳族|佤族|畲族|高山族|拉祜族|水族|东乡族|纳西族|景颇族|柯尔克孜族|土族|达斡尔族|仫佬族|羌族|布朗族|撒拉族|毛南族|仡佬族|锡伯族|阿昌族|普米族|塔吉克族|怒族|乌孜别克族|俄罗斯族|鄂温克族|德昂族|保安族|裕固族|京族|塔塔尔族|独龙族|鄂伦春族|赫哲族|门巴族|珞巴族|基诺族|其他族|外国血统|外国民族";


    public static Pair<SysDictType, SysDictData[]>[] strDictOut() {
        var list = Arrays.stream(DictConst.class.getFields()).filter(p -> Modifier.isStatic(p.getModifiers()) && p.getAnnotation(XmlAttribute.class) != null).collect(Collectors.toList());
        var re = list.stream().map(p -> {
            var dictType = new SysDictType();
            dictType.setDictName(p.getAnnotation(XmlAttribute.class).name());
            dictType.setDictType(p.getName());
            SysDictData[] data = null;
            try {
                var val = (String) p.get(null);
                var items = val.split("\\|");
                data = Arrays.stream(items).map(x -> {
                    var dc = new SysDictData();
                    dc.setDictType(dictType.getDictType());
                    dc.setDictLabel(x);
                    dc.setDictValue(x);
                    return dc;
                }).toArray(SysDictData[]::new);
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            }
            if (indexValueSign.equals(p.getAnnotation(XmlAttribute.class).namespace()))
                for (int i = 0; i < data.length; i++)
                    data[i].setDictValue(i + "");
            return new Pair(dictType, data);
        }).toArray(Pair[]::new);
        return re;
    }
    public static Pair<SysDictType, SysDictData[]>[]  outDict() {
        var inners = DictConst.class.getDeclaredClasses();
        var list = Arrays.stream(inners).filter(p -> Modifier.isStatic(p.getModifiers())&&p.getAnnotation(Description.class)!=null&&p.isEnum()).collect(Collectors.toList());
        var re = list.stream().map(p -> {
            var dictType = new SysDictType();
            dictType.setDictName(p.getAnnotation(Description.class).value());
            dictType.setDictType(type_prefix + p.getSimpleName());
            var data = Arrays.stream(p.getEnumConstants()).map(x -> {
                var dictData = new SysDictData();
                dictData.setDictLabel(((Enum) x).name());
                dictData.setDictValue(((EnumIntValue) x).getValue() + "");
                dictData.setRemark("系统内置创建值，请勿修改："+dictData.getDictLabel()+"="+dictData.getDictValue());
                return dictData;
            }).toArray(SysDictData[]::new);
            return new Pair(dictType, data);
        }).toArray(Pair[]::new);
        return re;
    }
}
